# -*- coding: utf-8 -*-
# @Time : 2023/11/21 8:13 PM 
# @Author : Wayne
# @Email : 1
# @File : many_dic_add.py
# @Project : young_python_demo
# @DESCRIPTION :多个字典相加组合操作
# 在本文中，我们介绍了三种方法来将两个或多个Python字典相加。第一种方法是使用update()方法，
# 它将一个字典的键值对添加到另一个字典中。第二种方法是使用“**”运算符，它将两个字典合并到一个新的字典中。
# 第三种方法是使用ChainMap类，它将多个字典链接在一起，形成一个虚拟的字典。需要注意的是，如果两个字典中存在
# 相同的键，则后面的字典中的值将覆盖前面的字典中的值
# https://www.ycpai.cn/python/ut9EiKr5.html

"""
我们首先将两个字典定义为dict1和dict2。然后，我们使用update()方法将dict2中的键值对添加到dict1中。
最后，我们打印出dict1的内容，可以看到它已经包含了dict2中的所有键值对
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
"""
def update_no_repeated_key():
    dict1 = {'a': 1, 'b': 2}

    dict2 = {'c': 3, 'd': 4}

    dict1.update(dict2)
    print(dict1)

update_no_repeated_key()


"""
在这个例子中，我们可以看到字典dict1和dict2都包含键b，但是在合并后的字典中，键b的值被更新为dict2中的值3
{'a': 1, 'b': 3, 'c': 4}
"""
def update_repeated_key():
    dict1 = {'a': 1, 'b': 2}

    dict2 = {'b': 3, 'c': 4}

    dict1.update(dict2)

    print(dict1)

update_repeated_key()


"""
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
除了使用update()方法之外，Python还提供了另一种方法来合并字典，即使用“**”运算符
在这个例子中，我们首先将两个字典定义为dict1和dict2。然后，我们使用“**”运算符将它们合并到一个新的字典dict3中。
最后，我们打印出dict3的内容，可以看到它已经包含了dict1和dict2中的所有键值对
"""
def update_star_no_repeat_key():
    dict1 = {'a': 1, 'b': 2}

    dict2 = {'c': 3, 'd': 4}

    dict3 = {**dict1, **dict2}
    print(dict3)


"""
{'a': 1, 'b': 3, 'c': 4}
我们可以看到字典dict1和dict2都包含键b，但是在合并后的字典中，键b的值被更新为dict2中的值3
"""
def update_star_repeat_key():
    dict1 = {'a': 1, 'b': 2}

    dict2 = {'b': 3, 'c': 4}

    dict3 = {**dict1, **dict2}

    print(dict3)


"""
ChainMap({'a': 1, 'b': 2}, {'c': 3, 'd': 4})
Python的collections库中提供了一个ChainMap类，它可以将多个字典链接在一起，形成一个虚拟的字典
我们首先将两个字典定义为dict1和dict2。然后，我们使用ChainMap类将它们链接在一起，形成一个虚拟的字典dict3。
最后，我们打印出dict3的内容，可以看到它包含了dict1和dict2中的所有键值对
"""
def update_ChainMap_no_repeat_key():
    from collections import ChainMap

    dict1 = {'a': 1, 'b': 2}

    dict2 = {'c': 3, 'd': 4}

    dict3 = ChainMap(dict1, dict2)

    print(dict3)
update_ChainMap_no_repeat_key()


"""
我们可以看到字典dict1和dict2都包含键b，但是当我们使用ChainMap类访问键b时，它返回的是dict1中的值2
返回
"""
def update_ChainMap_repeat_key():
    from collections import ChainMap

    dict1 = {'a': 1, 'b': 2}

    dict2 = {'b': 3, 'c': 4}

    dict3 = ChainMap(dict1, dict2)

    print(dict3['b'])